#include <iostream>

const int StackSize = 10;

class ArrayStack
{
public:
    ArrayStack() : len(0) {};
    // 入栈
    void Push(const int &elememt)
    {
        if (len == StackSize)
        {
            std::cout << "栈空间满" << std::endl;
            return;
        }
        a[len++] = elememt;
    }
    // 出栈      
    void Pop()
    {
        if (len == 0)
        {
            std::cout << "栈空间为0" << std::endl;
            return;
        }
        len--;  
    }
    // 获取栈顶元素
    int *GetTop()
    {
        if (len == 0)
        {
            std::cout << "栈空间为0" << std::endl;
            return nullptr;
        }
        return &a[len - 1]; // 栈顶元素是len = 0
    }
    // 判断栈是否为空
    bool IsEmpty()
    {
        return len == 0;
    }

private:
    int a[StackSize];
    int len; // 栈顶指针  (放一个加1)
};

int main()
{
    // ArrayStack s;
    // for (int i = 0; i < 20; i++)
    // {
    //     s.Push(i + 1);
    // }

    // while (s.IsEmpty() == false) // 栈不能像数组那样遍历
    // {
    //     std::cout << *s.GetTop() << " ";
    //     s.Pop();
    // } // 塞进去的数据是1 - 10,出来的时候是 10 - 1
    // std::cout << std::endl;

    // 进制转换器
    int num = 0; // 要被转换的数据
    int n;       // 进制
    std::cin >> num >> n;

    ArrayStack s;
    while (num > 0)
    {
        s.Push(num % n);
        num /= n;
    }

    while (s.IsEmpty() == false)
    {
        int value = *s.GetTop();
        if (value > 9)
        {
            printf("%c", value - 10 + 'a');
        }
        else
        {
            std::cout << value;
        }
        s.Pop();
    }
    std::cout << std::endl;

    return 0;
}